sample\
05 sample_laybtn_ease.hsp
#include "mod_layerbutton.hsp"
// ボタン作成
pos 10,100
repeat 4
tien = 10*cnt
pos ,ginfo_cy+10
layerbutton 180,60, tien, 0, 30+tien,20,0, 15+tien/2,10,0 {
if lparam == objlayer_cmddraw {
color 0,0,0 : font msgothic, 18, 1
ti = objlayer_option
// ボタン状態で分岐 (+イージングで表示位置,色を変える)
switch layerbtn_stat
case LAYBTN_SHOW_IN
color 0,0,255 : rboxfao_auto objlayer_axis_x-laybtn_ease(200, 0, ti), objlayer_axis_y, objlayer_axis_x2-laybtn_ease(200, 0, ti), objlayer_axis_y2
color 250,250,250 : laybtn_mes "遅延="+ti,0, 1,1, -laybtn_ease(200, 0, ti)
swbreak
case LAYBTN_FOCUS_IN
color laybtn_ease(0,128),0,255 : rboxfao_auto objlayer_axis_x, objlayer_axis_y, objlayer_axis_x2, objlayer_axis_y2
color 250,250,250 : laybtn_mes "遅延="+ti,0, 1,1
swbreak
case LAYBTN_FOCUS_OUT
color laybtn_ease(128,0),0,255 : rboxfao_auto objlayer_axis_x, objlayer_axis_y, objlayer_axis_x2, objlayer_axis_y2
color 250,250,250 : laybtn_mes "遅延="+ti,0, 1,1
swbreak
case LAYBTN_PRESS_IN
color 128,128,255 : rboxfao_auto objlayer_axis_x, objlayer_axis_y, objlayer_axis_x2, objlayer_axis_y2
color 250,250,250 : laybtn_mes "遅延="+ti,0, 1,1
swbreak
case LAYBTN_SHOW_OUT
case LAYBTN_SHOW_OUT_SELECTED
if layerbtn_stat & LAYBTN_SELECTED { color 128,128,255 } else { color 0,0,255 }
rboxfao_auto objlayer_axis_x-laybtn_ease(0, 200, ti/2), objlayer_axis_y, objlayer_axis_x2-laybtn_ease(0, 200, ti/2), objlayer_axis_y2
color 250,250,250 : laybtn_mes "遅延="+ti,0, 1,1, -laybtn_ease(0, 200, ti/2)
swbreak
swend
}
return
}
loop
// 表示ループ
repeat
redraw 0 : color 255,255,255 : boxf : color : pos 0,0 : font msgothic,17
redraw 1
await 1000/60
loop
// 描画モジュール
#module
#deffunc lineArray array arr, int p1, int ox, int oy
pos ox+arr(0),oy+arr(1)
repeat limit(p1-1,0,length(arr)/2-1),1
line ox+arr(cnt*2),oy+arr(cnt*2+1)
loop
return
#deffunc boxfao int ax, int ay, int bx, int by, int ox, int oy
pdx=ax+ox,bx+ox,bx+ox,ax+ox
pdy=ay+oy,ay+oy,by+oy,by+oy
gsquare -1,pdx,pdy
return
#deffunc trianglefao int ax, int ay, int bx, int by, int cx, int cy, int ox, int oy
pdx=ax+ox,bx+ox,cx+ox,ax+ox
pdy=ay+oy,by+oy,cy+oy,ay+oy
gsquare -1,pdx,pdy
return
#deffunc quadfao int ax, int ay, int bx, int by, int cx, int cy, int dx, int dy, int ox, int oy
pdx=ax+ox,bx+ox,cx+ox,dx+ox
pdy=ay+oy,by+oy,cy+oy,dy+oy
gsquare -1,pdx,pdy
return
#deffunc circlefao int x1, int y1, int x2, int y2, int thick, int div, int ox, int oy
dcx = double(x1 + x2) / 2.0 + ox
dcy = double(y1 + y2) / 2.0 + oy
rx = absf(x2 - x1) / 2.0
ry = absf(y2 - y1) / 2.0
if rx < 1 || ry < 1 : return
div_ = div : if div_ <= 0 : div_ = limit((rx+ry)/4, 12, 128)
if thick == 1 {
repeat div_
ang1 = 2.0 * M_PI * cnt / div_
ang2 = 2.0 * M_PI * (cnt+1) / div_
x3 = dcx + cos(ang1) * rx
y3 = dcy + sin(ang1) * ry
x4 = dcx + cos(ang2) * rx
y4 = dcy + sin(ang2) * ry
trianglefao dcx, dcy, x3, y3, x4, y4
loop
return
}
thick_ = double(thick)
if thick_ < 1 : thick_ = 1.0
rx1 = rx - thick_/2.0
ry1 = ry - thick_/2.0
rx2 = rx + thick_/2.0
ry2 = ry + thick_/2.0
if rx1 < 0 : rx1 = 0
if ry1 < 0 : ry1 = 0
repeat div_
ang1 = 2.0 * M_PI * cnt / div_
ang2 = 2.0 * M_PI * (cnt+1) / div_
ox1 = dcx + cos(ang1) * rx2
oy1 = dcy + sin(ang1) * ry2
ox2 = dcx + cos(ang2) * rx2
oy2 = dcy + sin(ang2) * ry2
ix2 = dcx + cos(ang2) * rx1
iy2 = dcy + sin(ang2) * ry1
ix1 = dcx + cos(ang1) * rx1
iy1 = dcy + sin(ang1) * ry1
quadfao ox1,oy1, ox2,oy2, ix2,iy2, ix1,iy1
loop
return
#deffunc rboxfao int x1, int y1, int x2, int y2, int r, int div, int ox, int oy
div_ = div : if div_ <= 0 : div_ = limit(6+(r-5)*(12-6)/(25-5), 6,12)
boxfao x1+r, y1, x2-r, y2, ox,oy
boxfao x1, y1+r, x1+r, y2-r, ox,oy
boxfao x2-r, y1+r, x2, y2-r, ox,oy
repeat 4
if cnt=0 : cx=x1+r : cy=y1+r : ang0=180.0
if cnt=1 : cx=x2-r : cy=y1+r : ang0=270.0
if cnt=2 : cx=x2-r : cy=y2-r : ang0=0.0
if cnt=3 : cx=x1+r : cy=y2-r : ang0=90.0
repeat div_
ang1 = ang0 + 90.0 * cnt/div_
ang2 = ang0 + 90.0 * (cnt+1)/div_
x3 = cx + cos(ang1/180.0*M_PI)*r
y3 = cy + sin(ang1/180.0*M_PI)*r
x4 = cx + cos(ang2/180.0*M_PI)*r
y4 = cy + sin(ang2/180.0*M_PI)*r
trianglefao cx,cy, x3,y3, x4,y4, ox,oy
loop
loop
return
#deffunc rboxfao_auto int x1, int y1, int x2, int y2, int ox, int oy
w = abs(x2 - x1)
h = abs(y2 - y1)
r = (w+h)/40
if r > w/2 : r = w/2
if r > h/2 : r = h/2
if r < 1 : r = 1
rboxfao x1,y1,x2,y2, r,0, ox,oy
return
#global